// 主程序：检查内存使用率，超过阈值发送邮件
package main

import (
	"fmt"
	"time"
)

func main() {
	// 1. 配置邮件信息（********替换成你的实际信息********）
	emailConfig := EmailConfig{
		SmtpServer:  "smtp.126.com",        // 126邮箱固定SMTP服务器
		SmtpPort:    "465",                 // 126邮箱固定端口
		FromAddress: "your_email@126.com",  // 你的126邮箱（发件人）
		AuthCode:    "your_auth_code",      // 你的126邮箱授权码
		ToAddress:   "z2847845178@126.com", // 收件人邮箱（可以填自己的）
	}

	// 2. 循环检查内存使用率（每30秒检查一次）
	for {
		// 获取内存信息
		memInfo, err := Getmemory()
		if err != nil {
			fmt.Printf("获取内存信息失败：%v\n", err)
			time.Sleep(30 * time.Second)
			continue
		}

		// 打印当前内存状态
		fmt.Printf("[%s] 内存使用率：%.2f%%（总内存：%.2fGB，已用：%.2fGB）\n",
			time.Now().Format("2006-01-02 15:04:05"),
			memInfo.UsedPct,
			float64(memInfo.Total)/(1024*1024), // 转换为GB
			float64(memInfo.Used)/(1024*1024))

		// 3. 如果使用率超过60%，发送邮件
		if memInfo.UsedPct > 60 {
			fmt.Println("内存使用率超过60%，准备发送邮件...")

			// 邮件主题和内容
			subject := "服务器内存使用率警报"
			body := fmt.Sprintf("警告！当前服务器内存使用率过高：\n"+
				"时间：%s\n"+
				"总内存：%.2fGB\n"+
				"已用内存：%.2fGB\n"+
				"使用率：%.2f%%",
				time.Now().Format("2006-01-02 15:04:05"),
				float64(memInfo.Total)/(1024*1024),
				float64(memInfo.Used)/(1024*1024),
				memInfo.UsedPct)

			// 发送邮件
			err := SendEmail(emailConfig, subject, body)
			if err != nil {
				fmt.Printf("邮件发送失败：%v\n", err)
			} else {
				fmt.Println("邮件发送成功！")
				// 发送成功后，暂停5分钟再检查（避免频繁发送）
				time.Sleep(5 * time.Minute)
			}
		}

		// 没超过阈值，30秒后再次检查
		time.Sleep(30 * time.Second)
	}
}
